package modelo.dto;

import java.awt.Color;
import java.awt.Graphics;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Vector;

import modelo.dto.Pelota;
import modelo.dto.Nivel;

public class Jurado implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private int posCorrecta;  // Numero de pelotas en la posicion Correcta
	private int colCorrecto;  // Numero de pelotas con el color correcto pero no en la posicion correcta
	private Nivel nivel= new Nivel(); //clase Nivel que contiene la informacion de dificultad y clave
	private Vector<Integer> jugada=new Vector<Integer>(); //Vector que contiene el numero de la jugada realizada

	/**
	 * Constructor sin parametros
	 */
	public Jurado() {
		super();
		// TODO Auto-generated constructor stub
	}
	/**
	 * Contructor con parametros
	 * @param nivel
	 * @param jugada
	 */
	public Jurado(Nivel nivel, Vector<Integer> jugada)
	{
		posCorrecta=0;
		colCorrecto=0;
		this.jugada=jugada;
		this.nivel=nivel; 
		
		verificarPosicion(); //verifica posicion
		verificarColor();//Verifica Color
		 
		}

/** Permite verificar cuantas pelotas se encuentran en la posicion correcta
 * incrementando posCorrecta de ser cierto
 * 
 */
public void verificarPosicion(){
	
	for (int i=0;i<nivel.getDificultad();i++){
	      
		if (nivel.vectorclave().get(i)==jugada.get(i)) {
	    	  posCorrecta++;
		}
	}
}

/**
 * permite verificar si los colores de las pelotas se encuentran en la clave
 * pero no estan en la posicion correcta
 * 
 */
public void verificarColor(){
	Vector<Integer> pista =new Vector<Integer>();
	
	//ArrayList<Integer> pista=new ArrayList<Integer>();
    
	    for (int x:jugada){
	    	pista.add(x);
	    }
	    Vector<Integer> respuesta=new Vector<Integer>();
        // ArrayList<Integer> respuesta=new ArrayList<Integer>();
    
         for (int x:nivel.vectorclave()){
 	     respuesta.add(x);
        }
    
    int j=0;
    while (j<pista.size()){
	          
    	     if (respuesta.contains(pista.get(j))){
	            colCorrecto++;
	            respuesta.remove(pista.get(j));
	            pista.remove(j);
	          }else{
	        	  j++;
	          }
    }
    
	   colCorrecto=colCorrecto-posCorrecta;
}
/**
 * Metodo que permite dibujar una tira de pelotas 
 * dada una jugada
 * @param g
 * @param x
 * @param y
 */
public void pintar(Graphics g, int x, int y)
{
	int posnegblan=0;
	if(nivel.getDificultad()==4)
	{
		posnegblan=190;
	}else if(nivel.getDificultad()==5)
	{
		posnegblan=230;
	}else
	{
		posnegblan=270;
	}
	for(int i=0; i<nivel.getDificultad();i++)
	{
		int radius=30/2;
  	    int d14 = radius >>1; 
  	    int d34 = radius+d14; 
      
        g.setColor(Pelota.colores[jugada.get(i)].darker());
        g.fillOval(x+i*40,y,30, 30);
        g.setColor(Pelota.colores[jugada.get(i)]);
        g.fillOval( (x+d14-1)+i*40,y+d14-1,d34,d34 );
        g.setColor(Color.BLACK);
        g.drawOval(x+i*40,y,30, 30);
	}
	
    for(int i=0; i<posCorrecta;i++)
    {
    	g.setColor(Color.black);
    	g.fillOval(posnegblan+i*10, y+5, 8, 8);
    	g.setColor(Color.black);
    	g.drawOval(posnegblan+i*10, y+5, 8, 8);
    }
    for(int i=0; i<colCorrecto;i++)
    {
    	g.setColor(Color.white);
    	g.fillOval(posnegblan+i*10, y+17, 8, 8);
    	g.setColor(Color.black);
    	g.drawOval(posnegblan+i*10, y+17, 8, 8);
    }
}
public int getPosCorrecta() {
	return posCorrecta;
}
public void setPosCorrecta(int posCorrecta) {
	this.posCorrecta = posCorrecta;
}
public int getColCorrecto() {
	return colCorrecto;
}
public void setColCorrecto(int colCorrecto) {
	this.colCorrecto = colCorrecto;
}
public Nivel getNivel() {
	return nivel;
}
public void setNivel(Nivel nivel) {
	this.nivel = nivel;
}
public Vector<Integer> getJugada() {
	return jugada;
}
public void setJugada(Vector<Integer> jugada) {
	this.jugada = jugada;
}

}
